//############################################################################## // TYP create or replace type TAdres as object ( Ulica varchar2(32), Numer number ); / Sposób 1 ======== create table Tabela1 ( Id number, Nazwa varchar2(32), Adres TAdres ); insert into Tabela1 values (1, "Nazwa1", TAdres("Michalowskiego", 34)); insert into Tabela1 values (1, "Nazwa2", TAdres("Gombrowicza", 20)); select * from Tabela1; > Id, Nazwa, Adres "1", "Nazwa1", "TAdres("Michalowskiego", 34)" select Id, Nazwa, Adres from Tabela1; > Id, Nazwa, Adres "1", "Nazwa1", "TAdres("Michalowskiego", 34)" select T.Id, T.Nazwa, T.Adres.Ulica, T.Adres.Number from Tabela1 T; > Id, Nazwa, Ulica, Numer "1", "Nazwa1", "Michalowskiego", "34" Sposób 2 ======== create table Tabela2 of TAdres; insert into Tabela2 values (TAdres("Michalowskiego", 34)); select T.Ulica, T.Numer from Tabela2 T; select value(T) from Tabela2 T; Typy zagnieżdżone ================= create or replace type TAdres as object ( Ulica varchar2(32), Numer number ); create or replace type TOsoba as object ( Imie varchar2(32), Nazwisko varchar2(32), Adres TAdres ); create table Osoby of TOsoba; insert into Osoby values ( TOsoba("Adam", "Sawicki", TAdres("Michalowskiego", 34)) ); select T.Adres.Ulica from Osoby T; //############################################################################## // METODA create or replace type TAdres as object ( Ulica varchar2(32), Numer number, member procedure ZwiekszNumer(O_ile number), member function ToString return varchar2(32) ); create or replace type body TAdres as member procedure ZwiekszNumer(O_ile number) is ... begin Numer := Numer+O_ile; end; end; create or replace type body TAdres as member function ToString return varchar2(32) is ... begin return Ulica || ' ' || to_char(Numer); end; end; select T.ToString from Adresy T; //############################################################################## // TYP ZBIOROWY create or replace type TSamochod ( Marka varchar2(32), Rocznik number ); create or replace type TTablicaSamochodow as varray(5) of TSamochod; create table Ludzie ( Imie varchar2(32), Nazwisko varchar2(32), Samochody TTablicaSamochodow ); insert into Ludzie values ( "Adam", "Sawicki", TTablicaSamochodow( TSamochod("Daewoo", 1996) ) ); insert into Ludzie values ( "Grzegorz", "Stępnik", TTablicaSamochodow( TSamochod("FIAT", 1980), TSamochod("Skoda", 2005) ) ); insert into Ludzie values ( "Gosia", "Mroczkowstka", TTablicaSamochodow( ) ); select * from Ludzie; > Imie, Nazwisko, Samochody "Grzegorz", "Stępnik", "TTablicaSamochodow(TSamochod("FIAT", 1980),TSamochod("Skoda", 2005))" select T.Samochody from Ludzie T; > Samochody "TTablicaSamochodow(TSamochod("FIAT", 1980),TSamochod("Skoda", 2005))" select from the ( select T.Samochody from Ludzie T where Imie = "Grzegorz" ) > TSamochod("FIAT", 1980) TSamochod("Skoda", 2005) //############################################################################## // TABELE ZAGNIEŻDŻONE create or replace type TSamochod ( Marka varchar2(32), Rocznik number ); create or replace type TTablicaSamochodow as table of TSamochod; create table Ludzie ( Imie varchar2(32), Nazwisko varchar2(32), Samochody TTablicaSamochodow ) nested table Samochody store as Ludzie_Samochody; insert into Ludzie values ( "Adam", "Sawicki", TTablicaSamochodow( TSamochod("Daewoo", 1996) ) ); insert into Ludzie values ( "Grzegorz", "Stępnik", TTablicaSamochodow( TSamochod("FIAT", 1980), TSamochod("Skoda", 2005) ) ); insert into Ludzie values ( "Gosia", "Mroczkowstka", TTablicaSamochodow( ) ); select * from Ludzie; > Imie, Nazwisko, Samochody "Grzegorz", "Stępnik", "TTablicaSamochodow(TSamochod("FIAT", 1980),TSamochod("Skoda", 2005))" select T.Samochody from Ludzie T; > Samochody "TTablicaSamochodow(TSamochod('FIAT', 1980),TSamochod('Skoda', 2005))" select from the ( select T.Samochody from Ludzie T where Imie = 'Grzegorz' ) > TSamochod("FIAT", 1980) TSamochod("Skoda", 2005) insert into the ( select T.Samochody from Ludzie T where Imie = 'Grzegorz' ) values (TSamochod("Ford Escort", 1990)); delete from the ( select T.Samochody from Ludzie T where Imie = 'Grzegorz' ) T where T.Marka = 'Skoda'; create type TProdukcja as object( nazwa varchar2(32), gatunek varchar2(32) ); --typ zagniezdzona tablea create type TListaProdukcji as table of TProdukcja; --1 -- ################# create type TProgramista as object( ksywa varchar2(32), produkcje TListaProdukcji ); create table TabelaProgramistow of TProgramista; insert into TabelaProgramistow values( TProgramista("Regedit", TListaProdukcji( TProdukcja("gra mmorpg", "mmorpg") ) ) ); --2 -- ################# create table TabelaProgramistow( ksywa varchar2(32), produkcje TListaProdukcji ) nested table produkcje store as pojemnik; insert into TabelaProgramistow values( "Regedit", TListaProdukcji( TProdukcja( "gra", "mmorpg" ) ) ) delete from the( select produkcje from TabelaProgramistow where ksywa like 'Regedit' ); //############################################################################## // Perspektywa obiektowa create table userzy( id number primary key, ksywa varchar2(32) ); create table grafiki( id number primary key, id_usera number, nazwa_pliku varchar2(32), foreign key (id_usera) references userzy(id) ); select * from userzy u, grafiki g where u.id = g.id_usera; create type TGrafika as object( id number, id_usera number, nazwa_pliku varchar2(32) ); create TListaGrafik as table of TGrafika; create type TUser( id number, ksywa varchar2(32), ListaGrafik TistaGrafik ); createa of replace view Nazwa of TUser with object identifier(id) as select U.id, U.ksywa, cast( multiset( select id, id_usera, nazwa_pliku from grafiki where U.id = id_usera) as TListaGrafik ) from userzy U;